// 导入axios组件 
import axios from "axios";
// 导入ElMessage 
import { ElMessage } from "element-plus";
// 导入路由
import router from "@/router";



// 创建一个axios请求的app
const request = axios.create({
    baseURL: 'http://192.168.182.140:8000/api/v1/',
    timeout: 5000,
})

// ====== 请求拦截器  ============
// ===== 在发起Axios请求的时候，自动携带，全局响应 ====
// ===== 日常使用最多的就是做jwt认证的时候，自动携带token =====
request.interceptors.request.use(
    (config:any) =>{
        // 获取本地localstorage的token
        let token = localStorage.getItem('token')
        // 判断token是否存在
        if(token){
            config.headers.common['token'] = token
        }
        // 返回config 
        return config
    },
    (error:any) =>{
        Promise.reject(error);
    }

);


// ====== 响应拦截器 =============
// 主要用途：在相应拦截器中全局处理HTTP响应的各种错误！
request.interceptors.response.use(
    (response:any) => response,
    (error:any)=>{
        if (error && error.response) {
            error.data = {};
            switch (error.response.status) {
                case 400:
                    error.data.msg = '错误请求';
                    ElMessage.error(error.data.msg)
                    break
                case 401:
                    error.data.msg = error.response.data.error;
                    ElMessage.error(error.data.msg)
                    break
                case 403:
                    //error.data.msg = '拒绝访问';
                    //ElMessage.error(error.data.msg)
                    // 跳转到登录页面 
                    router.push({'name': 'Login'})
                    break
                case 404:
                    error.data.msg = '请求错误,未找到该资源';
                    ElMessage.error(error.data.msg)
                    break
                case 405:
                    error.data.msg = '请求方法未允许';
                    ElMessage.error(error.data.msg)
                    break
                case 408:
                    error.data.msg = '请求超时';
                    ElMessage.error(error.data.msg)
                    break
                case 500:
                    error.data.msg = '服务器端出错';
                    ElMessage.error(error.data.msg)
                    break
                case 501:
                    error.data.msg = '网络未实现';
                    ElMessage.error(error.data.msg)
                    break
                case 502:
                    error.data.msg = '网络错误';
                    ElMessage.error(error.data.msg)
                    break
                case 503:
                    error.data.msg = '服务不可用';
                    ElMessage.error(error.data.msg)
                    break
                case 504:
                    error.data.msg = '网络超时';
                    ElMessage.error(error.data.msg)
                    break
                case 505:
                    error.data.msg = 'http版本不支持该请求';
                    ElMessage.error(error.data.msg)
                    break
                default:
                    error.data.msg = `连接错误${error.response.status}`;
                    ElMessage.error(error.data.msg)
            }
        } else {
            error.data.msg = "连接到服务器失败";
            ElMessage.error(error.data.msg)
        }
        return Promise.reject(error);
    },
);


// 暴露
export default request